package cn.edu.jxust.common.domain.web.api.sysresource;

import cn.edu.jxust.common.domain.dto.RoleResourceVo;
import cn.edu.jxust.common.domain.dto.RoleVo;
import cn.edu.jxust.common.response.Result;
import cn.edu.jxust.core.infrastructure.util.Const;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author QiuKangming
 * @version 1.0
 * @description
 * @since 2020/09/15 15:19
 */
@RequestMapping("/api/role")
public interface IRoleController {

    /**
     * 查询Role记录
     * @param id 角色id号
     * @return Result
     */
    @GetMapping("/{id}")
    @RequiresPermissions("role:list")
    Result getOneRole(@PathVariable("id") @Validated Integer id);

    /**
     * 根据当前角色返回角色列表
     * @return Result
     */
    @GetMapping
    @RequiresPermissions("role:list")
    Result getRoleList();

    /**
     * 角色修改: 可修改的, 名字, 角色描述
     * @param roleVo  角色视图对象
     * @param bing 绑定结果集
     * @return Result
     */
    @RequiresRoles(value = {Const.SUPER_ADMIN})
    @PutMapping
    @RequiresPermissions("role:edit")
    Result updateRole(@RequestBody @Validated RoleVo roleVo, BindingResult bing);

    /**
     * 角色赋权接口, 前端传过来的授权信息是以逗号 , 分隔的字符串
     * @param roleResourceVo 角色资源对应视图对象
     * @param result 绑定结果集
     * @return Result
     */
    @PutMapping("/newPermission")
    @RequiresPermissions("role:authority")
    Result newPermission(@RequestBody @Validated RoleResourceVo roleResourceVo, BindingResult result);
}
